#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QThread>
#include <memory>

QT_BEGIN_NAMESPACE
class QTreeWidget;
class QTreeWidgetItem;
class QTableWidget;
class QTextEdit;
class QProgressBar;
class QLabel;
class QPushButton;
class QCheckBox;
class QLineEdit;
class QSplitter;
class QTimer;
QT_END_NAMESPACE

class ObfuscatorEngine;
class ConfigPanel;
struct ObfuscationResult;

class MainWindow : public QMainWindow {
    Q_OBJECT
    
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    
private slots:
    // 菜单操作
    void onOpenProject();
    void onSaveProject();
    void onExportMappings();
    void onExit();
    
    // 配置管理
    void onImportConfig();
    void onExportConfig();
    
    // 工具操作
    void onStartObfuscation();
    void onValidateCode();
    void onRollback();
    void onShowHistory();
    void onManageWhitelist();
    
    // 混淆进度
    void onProgressUpdated(int percentage, const QString &message);
    void onObfuscationCompleted(const ObfuscationResult &result);
    void onErrorOccurred(const QString &error);
    
    // 项目树操作
    void onProjectItemClicked(QTreeWidgetItem *item, int column);
    
    // 时间更新
    void updateDateTime();
    
    // 配置面板请求
    void onRequestExcludeFromProject();
    
    // 窗口大小变化处理
    void onWindowResize();
    
protected:
    // 重写窗口大小变化事件
    void resizeEvent(QResizeEvent *event) override;
    
private:
    // 动态更新按钮尺寸
    void updateButtonSizes();
    
    // 响应式字体大小计算
    int getResponsiveFontSize(int baseSize = 10) const;
    
    void setupUi();
    void createMenuBar();
    void createToolBar();
    void createCentralWidget();
    void createStatusBar();
    
    void loadProject(const QString &path);
    void updateProjectTree();
    void loadProjectDirectory(QTreeWidgetItem *parent, const QString &path);
    void updateHistoryTable();
    void showMessage(const QString &message, int timeout = 3000);
    void loadStyleSheet();
    bool filterProjectTree(QTreeWidgetItem *item, const QString &text);
    
    // UI组件
    QTreeWidget *m_projectTree;
    class CodeEditor *m_codePreview;  // 源码预览窗口
    QLabel *m_currentFileLabel;  // 当前文件标签
    ConfigPanel *m_configPanel;
    QTableWidget *m_historyTable;
    QTextEdit *m_logOutput;
    QProgressBar *m_progressBar;
    QLabel *m_statusLabel;
    QLabel *m_statsLabel;
    QLabel *m_statusIndicator;
    QLabel *m_projectPathLabel;
    QLabel *m_dateTimeLabel;
    QTimer *m_dateTimeTimer;
    
    // 操作按钮
    QPushButton *m_startButton;
    QPushButton *m_validateBtn;
    QPushButton *m_rollbackBtn;
    
    // 核心引擎
    std::unique_ptr<ObfuscatorEngine> m_engine;
    std::unique_ptr<QThread> m_workerThread;
    
    // 项目信息
    QString m_projectPath;
    QString m_currentVersion;
    
    // 响应式设计参数
    qreal m_screenDPI;
    int m_screenWidth;
    int m_screenHeight;
};

#endif // MAINWINDOW_H